今晚我跟兩個模型要同一張圖:標準常態分布的密度曲線,在 z 等於正負 1.96 處各畫一條垂直虛線,線間填色,中央標上 95%,橫軸寫 z,縱軸寫 density。
兩個都交出檔案。我打開,圖是對的,六個要素一個不差。
然後我多問了一句:這張圖是怎麼畫出來的?
一個說,它用 NumPy 算密度,再用 Matplotlib 繪圖。另一個說得更細:先建立 Python 檔,執行 python3,再用指令確認產出是 PNG。
我要到了圖。模型寫了程式,程式再呼叫繪圖套件把圖畫出來。
通過某種模態或任務的測試,本身不足以保證通過另一種測試;跨能力推論需要另外的證據或保證。
放到今晚的例子,就是看懂一張圖、寫出繪圖程式、交出圖片檔,要分開確認。除非已經有可靠的證據或保證,能從其中一項推知另一項,否則不能看到模型做到了前者,就認定後者也沒問題。
同一個模型當然可能三件事都會。要交代的是它在什麼條件下做到了哪些事,以及過程中用了什麼工具。
我先用本機繪圖套件製作基準圖,訂好六個查核元素:常態曲線、兩條垂直虛線、位置在正負 1.96、線間填色、標註 95%、軸標題 z 與 density。

圖 1|實驗前製作的基準圖,也是 T1 提供給模型描述的圖片。
接著用不同方式提出要求,分別記為 T1 到 T5,方便對照。前三種在實驗前就訂好,後兩種是看過結果才追加的探索,不納入原訂假說的判定。
兩個模型是 gpt-6-astra 和 Claude Haiku 4.5,分別透過 Codex 命令列與 Claude Code 代理工具呼叫。每個模型、每種要求都只跑一次。
| 要求 | gpt-6-astra | Haiku 4.5 |
|---|---|---|
| T1 描述畫面 | 六元素全對 | 六元素全對 |
| T2 產生繪圖程式 | 可執行,六元素齊全 | 可執行,六元素齊全 |
| T3 輸出圖片檔 | 有檔案,程式產生 | 有檔案,程式產生 |
| T4 直接輸出 PNG | 自述做不到,未產出 | 自述做不到,未產出 |
| T5 直接輸出 SVG | 可顯示,六元素齊全 | 可顯示,曲線形狀錯誤 |
同一張圖,只改了交付方式,結果就不同了。
T1 兩個模型都說對了六個元素。gpt-6-astra 還指出圖上沒有主標題、圖例、格線,也沒有上方與右側外框,核對基準圖後都正確。Haiku 則多說這是「95% 信心區間」,兩側各有 2.5% 的尾巴。圖上沒有這些字,那是模型補上的解讀,得與它實際讀到的內容分開看。
T2 兩段程式都能執行,六個元素也齊全。不過,Haiku 引用了規格沒要求的 SciPy。我這台機器剛好裝了,所以能跑;換到沒安裝的機器,就會在匯入套件時出錯。兩段程式還各自加了規格外的東西:astra 保留四面外框,Haiku 加了格線與文字的白色底框。

圖 2|T2,gpt-6-astra 的繪圖程式執行結果。圖中保留了基準圖沒有的上方與右側外框。

圖 3|T2,Haiku 4.5 的繪圖程式執行結果。模型另外加上格線與 95% 文字的白底框。
T3 兩個都交出圖片檔,做法也相同:寫程式,再執行。這一輪沒有模型直接輸出 PNG 的檔案內容。

圖 4|T3,gpt-6-astra 交付的 PNG。依執行紀錄,模型先寫程式,再呼叫繪圖套件產生檔案。

圖 5|T3,Haiku 4.5 交付的 PNG,同樣由程式產生。與圖 4 相比,配色與文字樣式不同,要求的六個元素都有。
如果我的需求只是拿到一張正確的圖,到這裡已經完成了。但「能交圖」包含哪些步驟,還可以再拆開看。
T4 多了一項限制:不要寫程式,也不要呼叫工具,直接產生 PNG 的檔案內容。
兩個模型都說做不到,沒有交出檔案。它們的解釋都指向 PNG 的編碼:除了安排像素的位置與顏色,還得處理壓縮和校驗碼。gpt-6-astra 特別提到,即使用 base64 把二進位資料表示成文字,也沒有省掉這些步驟。Haiku 則補了一句:SVG 是文字格式,相對簡單。
於是我加了 T5。限制不變,只把格式換成 SVG。
gpt-6-astra 寫出三千多字元的 SVG 原始碼。我用系統內建工具把它轉成可看的圖,六個元素齊全,曲線是正常鐘形,刻度也標到正負 1.96。這次模型直接寫出了圖形的描述,顯示畫面仍由 SVG 渲染器完成。

圖 6|T5,gpt-6-astra 直接寫出的 SVG,經 macOS 內建工具渲染後的畫面。曲線呈鐘形,六個元素齊全。
Haiku 也交出 SVG,開頭就說「我可以手工寫出」。虛線的位置換算回座標,剛好是正負 1.96;填色、95%、軸標題都在。只有曲線不對:畫面是一頂折線帳篷,中央插著一根針。

圖 7|T5,Haiku 4.5 的 SVG 經同一工具渲染後的畫面。檔案可以顯示,曲線卻成了折線帳篷加尖刺;這是實驗中保留的錯誤結果。
比對曲線座標後,問題更清楚了。下表的 y 是畫面上的像素座標,數字越小,位置越高;「真值 y」是把正確密度換算到同一張畫布後的位置。
| z | 模型給的 y | 真值 y | 差 |
|---|---|---|---|
| -4.00 | 499.85 | 499.85 | 0.00 |
| -3.00 | 494.90 | 494.90 | 0.00 |
| -2.00 | 437.91 | 437.91 | 0.00 |
| -1.00 | 351.42 | 221.72 | 129.70 |
| -0.25 | 278.20 | 55.32 | 222.88 |
| 0.00 | 41.25 | 41.20 | 0.05 |
表中尾端的三個點與真值一致,最高點也只差 0.05 像素。偏偏中間兩個點差了約 130 和 223 像素,曲線的肩部就塌下去了。正負一、正負二的座標值又分別相同,看起來像是先產生半邊,再鏡射到另一邊;單憑座標,還不能確定它實際怎麼算。
這份 SVG 能正常顯示,數值卻錯了。檔案打得開,只通過了其中一關。
五種要求都是打字送出的,看起來都是「我要了,它給了」。背後卻有模型輸出的文字、被執行的繪圖程式,以及把 SVG 顯示出來的渲染器。
這些差別會影響成果能不能重做。Haiku 的繪圖程式在我這裡能跑,是因為機器上已經裝好 SciPy。直接輸出 SVG 不需要執行那段 Python 程式,卻仍得經過渲染器,也仍可能畫出帳篷加尖刺。
所以,拿到圖之後,我會多問一句:這張圖用了什麼工具、經過哪些步驟?
先知道模型直接輸出了什麼、後面又執行了什麼,才知道該檢查哪裡。程式跑不起來,要查執行環境;SVG 打得開但形狀錯了,要回頭查座標。只用「會不會畫圖」來問,這些差別都被省掉了。
我的紀錄表因此多了一欄:「由什麼產生」。看成品只能知道交出了什麼,這一欄才交代它是怎麼做出來的。
本文的協作紀錄是:前三種要求的實驗設計、判定規則與基準圖,在呼叫模型前就已存檔;T4、T5 於看到結果後追加,五種要求的原始輸出均逐字保留。判定由 Claude 對照基準圖完成,作者未逐格核對。文章由 Claude 依作者整理的寫作規則起草,gpt-5.6-sol 潤稿一次;原稿記載作者已核對用語與引文。
本次再由 Codex 依 human-writing 技能整理語句與段落,修訂稿尚待作者確認。本文尚未經過 Day 2 那種六個審查者的檢查。
下一篇談一張成功的截圖,能證明 AI 會做多少事。